// 导入请求地址
import axios from 'axios'
// 使用第二个refreshtoken得到一个新token值哈removeRefreshToken,
import { xuTokenAPI } from '@/api/Login.js'
import { getToken, setToken, getRefreshToken } from './token'
// import router from '@/router'
// 还有基地址
import { BASE_URL_APP } from '../../config'
// 使用axios创建实例 create
const request = axios.create({
  baseURL: BASE_URL_APP
})
// 请求拦截器统一对发往服务器端做处理
request.interceptors.request.use(config => {
  const token = getToken()
  // 另外的一个token哈
  const refreshtoken = getRefreshToken()
  if (token) {
    // 则通过请求头的Authorization字段统一给后台携带过去
    config.headers.Authorization = `Bearer ${token}`
  } else if (refreshtoken) {
    config.headers.Authorization = `Bearer ${refreshtoken}`
  }

  return config
}, e => {
  return Promise.reject(e)
})
// 响应拦截器
request.interceptors.response.use(resp => {
  // 今后组件拿到的数据，无需在.data一次，拿到的就是数据了
  return resp.data
}, async e => {
  if (e.response.status === 401) {
  // 当token过期之后依然还存在 所以将过期的token值直接清空 吧最新的token值传输过去
    setToken('')
    //  就表示token值过期需要重新登录哈
    const resp = await xuTokenAPI() // 当token值过期之后调用更新token值的请求 用 refershtoken 换取新的token 在给到vuex中替换掉过期的token
    setToken = resp.data.token
    // 并且吧请求来的新token给到vuex更新里面的共享数据
    // 在使用这发送一次请求
    return request(e.config)
    // removeRefreshToken()
    //   console.log(e)
    //   // const resp = await xuTokenAPI()
    //   // console.log(resp)
    //   // 跳转到登录页面  哈
    // router.replace('/login')
  }
  // return Promise.reject(e)
})
// 最后在导出基地址哈
export default request
